// page/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 轮播图数据
    bannerList: [],
    // 服务列表数据
    serviceList: [],
    // 当前显示的服务列表
    currentServiceList: [],
    // 加载状态
    loading: false,
    // 刷新状态
    refreshing: false,
    // 加载更多状态
    loadingMore: false,
    // 是否还有更多数据
    hasMore: true,
    // 当前页码
    currentPage: 1,
    // 每页数量
    pageSize: 10000000,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 先显示默认数据
    this.setData({
      currentServiceList: this.data.serviceList,
    });
    // 加载轮播图数据
    this.loadBannerData();
    // 然后尝试加载API数据
    this.loadServiceData();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时刷新数据
    this.loadBannerData();
    this.loadServiceData();

    // 监听轮播图更新事件
    this.listenBannerUpdate();
  },

  /**
   * 加载轮播图数据
   */
  async loadBannerData() {
    try {
      // 先从数据库加载轮播图
      await this.loadBannersFromDatabase();
    } catch (error) {
      // 如果数据库加载失败，使用默认轮播图
    }
  },

  /**
   * 从数据库加载轮播图
   */
  async loadBannersFromDatabase() {
    try {
      const { bannerApi } = require("../../utils/api.js");
      const result = await bannerApi.getBanners();

      if (result.code === 0 && result.data) {
        // 转换数据库数据格式
        const bannerList = result.data.map((item) => {
          let imageUrl = item.image_url;
          // 只有当URL是相对路径时才添加域名前缀
          if (
            imageUrl &&
            imageUrl.startsWith("/uploads/") &&
            !imageUrl.startsWith("http")
          ) {
            const { imageServerURL } = require("../../config.js");
            imageUrl = `${imageServerURL}${imageUrl}`;
            // 临时解决方案：如果是手机端且使用HTTP，使用占位图片
            const deviceInfo = wx.getDeviceInfo();
            if (
              deviceInfo.platform !== "devtools" &&
              imageUrl.startsWith("http://")
            ) {
              imageUrl = "/images/tongzhi.jpg";
            }
          }
          return {
            id: item.id,
            image: imageUrl,
            title: item.title,
            link: item.link_url || "/pages/appointment/appointment",
          };
        });

        this.setData({ bannerList });
      }
    } catch (error) {
      // 如果是连接错误，提示用户检查服务器
      if (error.errMsg && error.errMsg.includes("ERR_CONNECTION_REFUSED")) {
        // 可以在这里添加重试逻辑
        setTimeout(() => {
          this.loadBannersFromDatabase();
        }, 3000);
      }

      throw error;
    }
  },

  /**
   * 监听轮播图更新事件
   */
  listenBannerUpdate() {
    // 初始化事件总线
    if (!wx.eventBus) {
      wx.eventBus = {
        listeners: {},
        on: function (event, callback) {
          if (!this.listeners[event]) {
            this.listeners[event] = [];
          }
          this.listeners[event].push(callback);
        },
        emit: function (event, data) {
          if (this.listeners[event]) {
            this.listeners[event].forEach((callback) => callback(data));
          }
        },
      };
    }

    // 监听轮播图更新事件
    wx.eventBus.on("bannerUpdated", () => {
      this.loadBannerData();
    });
  },

  /**
   * 更新当前显示的服务列表
   */
  updateCurrentServiceList() {
    const { serviceList } = this.data;
    // 显示所有服务，不再按类型过滤
    this.setData({
      currentServiceList: serviceList,
    });
  },

  /**
   * 加载服务数据
   */
  async loadServiceData() {
    this.setData({ loading: true });

    try {
      // 直接从API加载商品数据
      const { productApi } = require("../../utils/api.js");
      const result = await productApi.getProducts();

      if (result.code === 0) {
        // 转换API数据格式
        const serviceList = result.data.list.map((item) => {
          // 处理图片路径，如果没有图片则为空
          let imageUrl = "";
          if (item.images && item.images.trim()) {
            // 只有当URL是相对路径时才添加域名前缀
            if (
              item.images.startsWith("/uploads/") &&
              !item.images.startsWith("http")
            ) {
              // 如果是上传的图片，转换为完整URL
              const { imageServerURL } = require("../../config.js");
              imageUrl = `${imageServerURL}${item.images}`;
              // 临时解决方案：如果是手机端且使用HTTP，使用占位图片
              const deviceInfo = wx.getDeviceInfo();
              if (
                deviceInfo.platform !== "devtools" &&
                imageUrl.startsWith("http://")
              ) {
                // 使用本地占位图片
                imageUrl = "/images/tongzhi.jpg";
              }
            } else if (item.images.startsWith("http")) {
              // 如果已经是完整URL，直接使用
              imageUrl = item.images;
            }
          }

          return {
            id: item.id,
            title: item.name,
            description: item.description,
            price: item.price.toString(),
            image: imageUrl,
            tags: item.tags || [],
          };
        });

        this.setData({
          serviceList: serviceList,
          currentServiceList: serviceList,
          loading: false,
        });
      } else {
        // API失败时使用默认数据
        this.setData({
          currentServiceList: this.data.serviceList,
          loading: false,
        });
      }
    } catch (error) {
      // 如果是连接错误，提示用户检查服务器
      if (error.errMsg && error.errMsg.includes("ERR_CONNECTION_REFUSED")) {
        // 可以在这里添加重试逻辑
        setTimeout(() => {
          this.loadServiceData();
        }, 3000);
      }

      // 出错时使用默认数据
      this.setData({
        currentServiceList: this.data.serviceList,
        loading: false,
      });
    }

    // 商品数据已从数据库加载完成
  },

  /**
   * 轮播图点击事件
   */
  onBannerTap(e) {
    // 轮播图点击不做任何操作
    // 用户需要点击服务卡片的"立即预约"按钮才能跳转
  },

  /**
   * 服务卡片点击事件
   */
  onServiceTap(e) {
    const serviceId = e.currentTarget.dataset.id;

    // 直接跳转到预约页面，登录检测移到预约页面
    // 优先从当前显示的服务列表中获取对应的商品标题（因为页面显示的是这个）
    let service = this.data.currentServiceList.find(
      (item) => item.id == serviceId
    );
    // 如果当前列表没找到，再从完整列表中查找（兜底方案）
    if (!service) {
      service = this.data.serviceList.find((item) => item.id == serviceId);
    }
    const productTitle = service ? service.title : "";

    // 如果仍然获取不到标题，给出警告但不阻止跳转
    if (!productTitle) {
      console.warn(
        `警告：无法获取 serviceId=${serviceId} 的商品标题，可能数据还未加载完成`
      );
    }

    wx.navigateTo({
      url:
        "/pages/appointment/appointment?serviceId=" +
        serviceId +
        "&productTitle=" +
        encodeURIComponent(productTitle),
    });
  },

  /**
   * 下拉刷新
   */
  onPullDownRefresh() {
    this.setData({
      refreshing: true,
      currentPage: 1,
      hasMore: true,
    });

    // 重新加载数据
    this.loadBannerData();
    this.loadServiceData();

    // 停止下拉刷新动画
    setTimeout(() => {
      this.setData({
        refreshing: false,
      });
      wx.stopPullDownRefresh();
    }, 1000);
  },

  /**
   * 上拉加载更多
   */
  onReachBottom() {
    if (this.data.loadingMore || !this.data.hasMore) {
      return;
    }

    this.setData({
      loadingMore: true,
    });

    // 加载下一页数据
    this.loadMoreServiceData();
  },

  /**
   * 加载更多服务数据
   */
  async loadMoreServiceData() {
    try {
      const nextPage = this.data.currentPage + 1;

      // 这里可以调用API加载更多数据
      // 由于当前是静态数据，我们模拟加载更多
      setTimeout(() => {
        this.setData({
          currentPage: nextPage,
          loadingMore: false,
          hasMore: false, // 模拟没有更多数据
        });

        wx.showToast({
          title: "没有更多数据了",
          icon: "none",
          duration: 1500,
        });
      }, 1000);
    } catch (error) {
      this.setData({
        loadingMore: false,
      });
      wx.showToast({
        title: "加载失败",
        icon: "none",
      });
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: "甲年华美甲美甲美睫 - 专业美甲美睫服务",
      desc: "专业美甲师，精致服务，让您的美甲更加完美",
      path: "/pages/home/index",
      imageUrl: "/images/share-home.jpg", // 可以添加分享图片
    };
  },

  /**
   * 分享到朋友圈
   */
  onShareTimeline() {
    return {
      title: "甲年华美甲美睫 - 专业美甲美睫服务",
      query: "",
      imageUrl: "/images/share-home.jpg", // 可以添加分享图片
    };
  },
});
